import axios from "axios";
import {Message} from "element-ui";
import router from "@/router";
import de from "element-ui/src/locale/lang/de";

const service = axios.create({
    // 定义返回数据类型
    responseType: 'arraybuffer'
})

service.interceptors.request.use(config =>{
        // 如果sessionStorage存在token（已经登陆）
    if (window.sessionStorage.getItem("tokenStr")) {
        // 将token信息加入请求头
        config.headers['Authorization'] = window.sessionStorage.getItem("tokenStr");
    }
    return config;
    }, error => {
    Message.error("发生错误："+error);
})

function unitToString(unitArray) {
    let encodedString = String.fromCharCode.apply(null,new Uint8Array(unitArray));
    let decodedString = decodeURIComponent(escape(encodedString));
    return JSON.parse(decodedString);
}

service.interceptors.response.use(resp =>{
    // 拿到请求头
    const headers = resp.headers;
    // 定义正则表达式
    let reg = RegExp(/application\/json/);
    // 判断返回的请求头的类型是否与正则匹配
    if(headers['content-type'].match(reg)){
        // 如果匹配的话，说明是一个普通返回
        // 这里的目的是把流转回Json
        resp.data = unitToString(resp.data)
    }else {
        // 如果返回的不是json则进行字符流的处理
        // 引入js-file-download
        let fileDownload = require('js-file-download');
        // 拿到文件名
        let fileName = headers['content-disposition'].split(';')[1].split('filename=')[1];
        // 拿到响应类型（后缀名）
        let contentType = headers['content-type'];
        // 防止文件名中文乱码
        fileName = decodeURIComponent(fileName);
        // 通过插件下载文件
        fileDownload(resp.data,fileName,contentType);

    }
},error => {
    if (error.response.code == 504 || error.response.cancel == 404){
        Message.error({message:'服务器被吃了( ╯□╰ )'});
    } else if (error.response.code == 500){
        Message.error({message:'服务器发生错误'});
    } else if (error.response.code == 403){
        Message.error({message:'权限不足，请联系管理员'});
    } else if (error.response.code == 401){
        Message.error({message:'尚未登陆，请先登录'});
        router.replace('/');
    } else {
        if (error.response.data.message){
            Message.error({message:error.response.data.message})
        }else {
            Message.error({message:'未知错误'});
        }
    }
    return;
})

let base = '';

export const downloadRequest = (url,params) =>{
    return service({
        method:'get',
        url:`${base}${url}`,
        data:params
    })
}


export default service();